import idljGenerated.*;
import middleware.*;
import java.util.*;

public class DirectorioColaboradores extends IDirectorioColaboradoresPOA
{
    List<IColaboradorReinas> colaboradores;

    public DirectorioColaboradores()
    {
        colaboradores = new LinkedList<IColaboradorReinas>();
    }

    @Override
    public synchronized int altaColaborador(IColaboradorReinas colaborador)
    {
        // Si ya hay un colaborador con ese nombre, error -1.
        for (int i = 0; i < colaboradores.size(); i++)        
            if(colaborador.nombre().equals(colaboradores.get(i).nombre()))            
                return -1;
            
        // Si no, anyadimos el colaborador.
        colaboradores.add(colaborador);
        System.out.println("Colaborador " + colaborador.nombre() + " dado de alta.");
        return 0;
    }

    @Override
    public synchronized void bajaColaborador(IColaboradorReinas colaborador)
    {
        colaboradores.remove(colaborador);
        System.out.println("Colaborador " + colaborador.nombre() + " dado de baja.");
    }

    @Override
    public synchronized IColaboradorReinas[] obtenerListaColaboradores()
    {
        Object[] objArray = colaboradores.toArray();
        IColaboradorReinas[] result = new IColaboradorReinas[objArray.length];

        for (int i = 0; i < objArray.length; i++)
            result[i] = (IColaboradorReinas)objArray[i];

        return result;
    }

    public static void main(String args[])
    {
        // Inicializar middleware:
        JavaORB mdlw = new JavaORB();
		mdlw.nombreSN = "pcdultimate";
		mdlw.opcionesLC = args;

        // A partir de aqui, codigo es independiente de middleware!
        Middleware.inicializar(mdlw);

        // Crear sirviente
        DirectorioColaboradores sirviente = new DirectorioColaboradores();

        // Registrarse
        IDirectorioColaboradores directorioColaboradores = 
            (IDirectorioColaboradores)Middleware.registrar(sirviente, "IDirectorioColaboradores");

        // Registrarse en el servicio de nombres
        Middleware.nombrar(directorioColaboradores, "directorioColaboradores");
        System.out.println("Directorio de colaboradores registrado en el servicio de nombres");

        Middleware.esperar();
    }
}